package com.tedu.api;

import org.junit.Test;

public class StringBuilderAPI {
    /**
     * 字符串大量拼接：注意String造成内存溢出
     * String
     */
    @Test
    public void testString(){
        String str="字符串";
        for (int i=0;i<1000000000;i++){
            str+=i;   //
        }
    }
    /**
     * String ------不可改变对象  BUG（常量池）
     * 假设：拼接出1000000000000w个String---内存【开销过大】
     * 操作系统发现内存空间越来越小，会去硬盘上开辟空间--程序，电脑会卡
     *
     * 解决方案：不创建对象，原来对象实现拼接【添加，替换，插入】
     * StringBuilder对象   可变字符串对象
     * 语法：StringBuilder sb=new StringBuilder(字符串）；
     *
     * c语言     变量   int a=malloc(4); 开辟4个字节空间
     *                 a=1;
     *                 free(a);   清理内存
     *                 不会存在内存溢出
     *
     * Java语言  变量  int a=1 内存开辟a空间，保存1，jvm虚拟机提供GC功能
     */
    @Test
    public void testSB(){
        //创建可变的字符串对象【解决String大量拼接，造成内存溢出】
        String str="你就是我的";
        StringBuilder sb=new StringBuilder(str);
        //append方法
        sb.append("小可爱");
        System.out.println(sb);
    }
    /**
     * replace方法    替换  返回值 ：String
     * 作用：可以将字符串中指定范围内“内容”替换成给定内容
     *     含头不含尾
     *     replace(int start,int end,String str)
     *             开始位置，  结束位置， 替换内容
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类，构造器中直接传字符
        StringBuilder sb=new StringBuilder("你是我的小可耐");
        sb.replace(4,7,"baby");
        System.out.println(sb);
    }
    /**
     * insert方法      插入       返回值：String
     * 作用：将给定字符串插入到当前字符串中某个位置
     * insert(int index,String str)
     *        插入位置  ，插入内容
     */
    @Test
    public void testInsert(){
        //创建 可变字符串对象
        StringBuffer sb=new StringBuffer("你是我的小可耐");
        sb.insert(0,"今天");
        System.out.println(sb);
    }

}
